package com.campus.merchant.controller;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.campus.common.bean.common.Resp;

import com.campus.merchant.entity.Notice;
import com.campus.merchant.service.NoticeService;
import com.campus.merchant.vo.notice.NoticeDetailVO;
import com.campus.merchant.vo.notice.NoticeListVO;

import java.util.List;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 公告表 前端控制器
 * </p>
 *
 * @author ZhaoYuJie
 * @since 2025-07-15
 */
@RestController
@RequestMapping("/notice")
@Api(tags = "公告管理")
public class NoticeController {

    @Autowired
    private NoticeService noticeService;

    @ApiOperation("获取商户公告列表")
    @GetMapping("/list")
    public Resp<List<NoticeListVO>> getMerchantNoticeList() {
        
        List<NoticeListVO> noticeList = noticeService.getNoticeList();
        return Resp.success(noticeList);
    }

    /**
     * 获取公告详情
     *
     * @param id 公告ID
     * @return 公告详情
     */
    @GetMapping("/detail/{id}")
    @ApiOperation("获取公告详情")
    public Resp<NoticeDetailVO> getNoticeDetail(@ApiParam("公告ID") @PathVariable Long id) {
        Notice notice = noticeService.getById(id);
        if (notice == null) {
            return Resp.error("公告不存在");
        }

        // 更新查看次数，注意高并发情况
        noticeService.update(new LambdaUpdateWrapper<Notice>()
                .eq(Notice::getId, id)
                .setSql("view_count = view_count + 1"));

        NoticeDetailVO vo = new NoticeDetailVO();
        BeanUtils.copyProperties(notice, vo);
        // 返回更新前的view_count，因为前端可能需要显示原始值，或者可以重新查询一次获取最新值
        // 这里为了简化，直接返回当前查询到的notice对象转换的VO，view_count是更新前的
        // 如果需要返回更新后的view_count，需要再次查询数据库
        notice.setViewCount(notice.getViewCount() + 1); // 模拟更新后的值返回给前端
        BeanUtils.copyProperties(notice, vo);
        return Resp.success(vo);
    }
}
